﻿//----------------------------------------------------------------
// Desc: 硬件文件查询功能
// Edit: ShowLong, http://blog.csdn.net/showlong
//
// Date Created: 2009-01-11
//
// Update Date :
//
// Copyright (c) Fuel4D (http://www.fuel4d.com), All rights reserved.
//
//----------------------------------------------------------------
#pragma once


// 目录搜索功能
// .dir 尾部必须自带"\\"，如： "C:\\Client\\Data\\"
// .exp 找所有类型文件请用填0
//      找指定类型文件就填如下方式(不区分大小写)，如： ".txt" 或 ".dll" 或 ".png"
//      扩展名尾部通配用法，如找所有文件名尾部是_all.fmd的文件： "_all.fmd"
// .find_sub_dir 是否搜索子目录，否则只在当前目录搜索
// ._func 搜索结果与搜索保存对象
class FFindFile_WorkFunc : public IFMemObject
{
protected:
    explicit FFindFile_WorkFunc()
    {}

public:
    virtual void push_back(const ACHAR* filename, const ACHAR* filepath, const ACHAR* find_exp) = 0;
    virtual bool is_ignore_dir(const ACHAR* dir_name){ return false; }
};

extern FAPI bool FFindFileByPath(const ACHAR* dir, const ACHAR* exp, bool find_sub_dir, FFindFile_WorkFunc* __func);


//----------------------------------------------------------------
// 搜索保存机制(以下是三种常用搜索结果保存方式，如果不够用还可自行设定保存方式)
//----------------------------------------------------------------
class FFindFile_WorkFunc_Vector : public FFindFile_WorkFunc
{
    FDECLARE_CLASS(FFindFile_WorkFunc_Vector)

public:
    FVStringA vret;
    virtual void push_back(const ACHAR*, const ACHAR* filepath, const ACHAR*)
    {
        vret.push_back(filepath);
    }
};

class FFindFile_WorkFunc_Map : public FFindFile_WorkFunc
{
    FDECLARE_CLASS(FFindFile_WorkFunc_Map)

public:
    //FMStringA vret; // is a map<stra,stra>
    virtual void push_back(const ACHAR* filename, const ACHAR* filepath, const ACHAR*)
    {
        //vret.insert(std::make_pair<FStringA,FStringA>(filename, filepath));
    }    
};